package com.co.notaweb.beans.colegio;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.event.PhaseId;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import com.co.notaweb.constantes.ConstantesMsg;
import com.co.notaweb.entities.Colegio;
import com.co.notaweb.enums.ModalidadColegioEnum;
import com.co.notaweb.facade.IColegioFacadeLocal;
import com.co.notaweb.util.Constants;
import com.co.notaweb.util.FacesUtils;
import com.co.notaweb.util.SelectUtil;
import com.co.notaweb.util.ServiceLocator;
import com.icesoft.faces.component.ext.RowSelectorEvent;

public class ColegioBean {

	private IColegioFacadeLocal colegioFacade;
	private Colegio colegio;
	private List<SelectItem> listaModalidades;
	private List<Colegio> listaColegios;
	private String modalidad = "";
	private int colegioSelected = 0;
	private boolean showTablaColegios = false;

	/**
	 * colegioBean
	 * 
	 * @return
	 */

	@PostConstruct
	private void init() {
		try {
			colegioFacade = (IColegioFacadeLocal) new ServiceLocator()
					.getServiceLocal(Constants.FACADECOLEGIO);
			colegio = new Colegio();
			listaModalidades = SelectUtil.buildModalidadesColegioItems();
		} catch (Exception e) {
			FacesUtils.addErrorMessageBundle(ConstantesMsg.COMMON_ERROR);
			e.printStackTrace();
		}
	}

	private void limpiarForm() {
		colegio = new Colegio();
		modalidad = "0";
		colegioSelected = 0;
		showTablaColegios = false;
		listaColegios = new ArrayList<Colegio>();
	}

	private void llenarTablaColegios() {
		try {
			listaColegios = colegioFacade.consultarAllColegios();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 ******************************************************************************************************************** 
	 * Actions
	 ******************************************************************************************************************** 
	 */

	public String crearColegio() {
		try {
			limpiarForm();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
	}

	public String consultarColegio() {
		showTablaColegios = true;
		llenarTablaColegios();
		return "";
	}

	public String guardarColegio() {
		try {
			if(modalidad.isEmpty() || modalidad.equalsIgnoreCase("0")){
				FacesUtils.addErrorMessageBundle(ConstantesMsg.COMMON_REQUIRED_VALUE);
				return "";
			}
			
			if (colegio.getId() <= 0) {
				colegioFacade.createColegio(colegio);
				limpiarForm();
			} else {
				colegioFacade.editColegio(colegio);
				llenarTablaColegios();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
	}

	public String eliminarColegio() {
		try {
			if (colegio.getId() > 0) {
				colegioFacade.deleteColegio(colegio);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
	}

	/**
	 ******************************************************************************************************************** 
	 * Event Listners
	 ******************************************************************************************************************** 
	 */

	public void selectModalidadListener(ValueChangeEvent event) {
		if (event.getPhaseId() != PhaseId.INVOKE_APPLICATION) {
			event.setPhaseId(PhaseId.INVOKE_APPLICATION);
			event.queue();
			return;
		}
		try {
			if (!modalidad.equalsIgnoreCase("0")) {
				colegio.setModalidad(ModalidadColegioEnum.valueOf(
						ModalidadColegioEnum.class, modalidad));
			}
		} catch (Exception e) {
			FacesUtils.addErrorMessageBundle(ConstantesMsg.COMMON_ERROR);
			e.printStackTrace();
		}
	}

	public void rowColegioSelectionListener(RowSelectorEvent event) {
		if (event.getPhaseId() != PhaseId.INVOKE_APPLICATION) {
			event.setPhaseId(PhaseId.INVOKE_APPLICATION);
			event.queue();
			return;
		}

		try {
			colegio = listaColegios.get(colegioSelected);
			modalidad = colegio.getModalidad().toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 ******************************************************************************************************************** 
	 * Getters And Setters
	 ******************************************************************************************************************** 
	 */

	public Colegio getColegio() {
		return colegio;
	}

	public void setColegio(Colegio colegio) {
		this.colegio = colegio;
	}

	public List<SelectItem> getListaModalidades() {
		return listaModalidades;
	}

	public void setListaModalidades(List<SelectItem> listaModalidades) {
		this.listaModalidades = listaModalidades;
	}

	public List<Colegio> getListaColegios() {
		return listaColegios;
	}

	public void setListaColegios(List<Colegio> listaColegios) {
		this.listaColegios = listaColegios;
	}

	public String getModalidad() {
		return modalidad;
	}

	public void setModalidad(String modalidad) {
		this.modalidad = modalidad;
	}

	public int getColegioSelected() {
		return colegioSelected;
	}

	public void setColegioSelected(int colegioSelected) {
		this.colegioSelected = colegioSelected;
	}

	public boolean isShowTablaColegios() {
		return showTablaColegios;
	}

	public void setShowTablaColegios(boolean showTablaColegios) {
		this.showTablaColegios = showTablaColegios;
	}

}
